草庐IT

Java Iterator(迭代器)

全部标签

c++当尾数迭代器时,迭代器+整数的结果是什么?

假设您有一个随机访问迭代器(例如std::vectormyVector)当iter+someInt是past-end-iterator时,iter+someInt==myVector.end()??或者它可以是与myVector.end()不同的值吗? 最佳答案 这是未定义的行为。任何事情都可能发生。仅举几个选项:什么都没有,程序退出,异常,崩溃。 关于c++当尾数迭代器时,迭代器+整数的结果是什么?,我们在StackOverflow上找到一个类似的问题: h

c++ - 在模板 vector 上返回迭代器

我一直在四处寻找类似的东西,但找不到(或者我找到的东西没有帮助)。我正在尝试能够在模板类的vector上使用迭代器,返回它并在类外部使用它,如下面的代码所示。#include#includeusingnamespacestd;namespacens{templateclasstest{private:vectorcontainer;public:typedefvector::iteratoriterator;vector::iteratorbegin(){returncontainer.begin();}vector::iteratorend(){returncontainer.end

c++ - 为什么在堆上迭代一个大数组比在堆栈上迭代相同大小的数组更快?

我正在分配2个相同大小的数组,一个在堆栈上,一个在堆上,然后用简单的赋值遍历它们。可执行文件被编译为主线程堆栈分配40mb。此代码仅经过测试可在带有/STACK:41943040链接器标记的vc++中编译。#include"stdafx.h"#include#include#include#include#includeusingnamespacestd;size_tstackavail(){staticunsignedStackPtr;//topofstackptr__asmmov[StackPtr],esp//movpointertotopofstackstaticMEMORY_B

c++ - 如何迭代 std::string 中的所有正则表达式匹配及其在 c++11 std::regex 中的起始位置?

我知道两种从std::string获取正则表达式匹配的方法,但我不知道如何获取所有匹配及其各自的偏移量。#include#include#includeintmain(){usingnamespacestd;strings="123apples456oranges789bananasorangesbananas";regexr=regex("[a-z]+");constsregex_token_iteratorend;//hereIknowhowtogetalloccurences//butdon'tknowhowtogetstartingoffsetofeachonefor(sreg

c++ - 有没有办法让模板函数自动推断迭代器的底层数据类型?

我有一个函数,我需要一个迭代器的基础数据类型作为返回类型,如下所示:#include#include#includetemplatestd::vectorget_odd(ForwardIteratordata_begin,ForwardIteratordata_end){std::vectorret;std::copy_if(data_begin,data_end,std::back_inserter(ret),[](intx){returnx%2;});returnret;}intmain(){std::vectorvi{1,2,3,4,5};for(autoi:get_odd(vi

c++ - C++ 中的迭代器

我正在尝试创建自己的翻译器。这是大学作业。我的类翻译器中需要一个迭代器。classTranslator{private:maptranslator;public:classiterator{friendclassTranslator;private:map::iteratoritm;public:iteratoroperator++();pair&operator*();booloperator==(constiterator&it)const;};};我正在尝试重载operator*();这是代码。pair&Translator::iterator::operator*(){retu

c++ - 迭代 boost::icl::interval_set

我正在迭代boostinterval_set,我期望每个迭代器都是一个boostinterval,其值将通过upper访问和lower方法:boost::icl::interval_setoutages;//...//Insertintervalsintothedatabasefor(boost::icl::interval_set::iteratorit=outages.begin();it!=outages.end();it++){DATA_ACQUISITION::InsertInterval(db,it->lower(),it->upper())}但我在两个lower都收到错误

c++ - 使用迭代器删除元素,不知道 vector

我有一个情况。我为我的一项任务使用了模板化函数。对于这个函数,我通过引用传递迭代器。现在,我必须从vector中删除几个元素。我如何仅使用迭代器来做到这一点?请找到相应的代码:templateboolSomeFunc(BidirectionalIterator&first,BidirectionalIterator&last,IteratoranotherVecBegin){while((first+1)!=last){if(some_condition)//delete(first);HOW?elseif(some_other_condition)//delete(first+1);

c++ - 为什么 map.erase 返回迭代器?

我想删除std::map从beginIt到endIt的元素。erase函数将迭代器返回到最后一个删除元素之后的元素。不是结束了吗?为什么删除返回迭代器?autoit=m_map.erase(beginIt,endIt); 最佳答案 这是C++标准库为其所有容器采用的一个有用的特性。一个特别好的用途是当您删除一组受约束的元素并且迭代整个容器时。显然,从容器中删除某些内容会使您传递的迭代器无效。返回下一个候选迭代器很有用。 关于c++-为什么map.erase返回迭代器?,我们在StackO

c++ - 如何使用 for 循环通过反向迭代器调用删除

关于此处提供的答案:Howtocallerasewithareverseiterator在带有-std=c++11的g++4.8.4中编译时,以下结果会导致段错误(在++it上)。我是不是误解了答案?std::maptestmap;testmap[0]=1;for(autoit=testmap.rbegin();it!=testmap.rend();++it){testmap.erase(std::next(it).base());} 最佳答案 erase使迭代器无效,你必须从erase的返回中重建它:it=std::map::re